目标:两个月后,面对任何 Agent Infra / LLM Application 面试题,能给出有深度、有源码支撑、有实战经历的完整回答。
基准:你的对手是有 2 年 Agent 工程经验的候选人。你要在两个月内追平他们,并在系统理解深度上超过他们。
战略原则(先读这里)
原则 1:理解 > 记忆
每个系统手写一遍,带着问题写,不是抄代码。写完问自己:”如果这里不这样设计,会出什么问题?”
原则 2:有作品 > 有文档
Week 7 的 Capstone 项目是最重要的。面试时”我做过 X”比”我知道 X”价值高 5 倍。
原则 3:Python 第一
DeepSeek 岗位考 Python。TypeScript 文档用来理解 CC 的设计思路,不需要手写 TS 代码。
原则 4:每天结束写三行
今天真正理解了什么(不是”读了什么”)。不能写出来,就是没懂。
每日执行模板
08:00–10:00 精读(文档 + 源码,做笔记) |
每周日晚:做本周验收测试(见各周末”验收标准”)
Week 0(可选):语法基础自检
是否需要 Week 0? 对照下表自测,全部能答出则直接进 Week 1。
Python 自检(5 分钟,不看文档)
# 以下代码能流畅写出吗?(不是「大概会」,而是「闭眼能写」) |
答不出其中 2 题以上 → 先花 2 天学语法,再进 Week 1:
- Day 1:
docs/tech-stack/python/syntax/01-基础入门.md - Day 2:
docs/tech-stack/python/syntax/02-进阶特性.md - Day 3(选读):
docs/tech-stack/python/syntax/03-高阶精通.md
LLM 理论自检(快速判断)
能否用一句话解释:Transformer 的 Attention 计算、RLHF 的三步骤?
不能 → 花半天读:
docs/LLM技术深度系列/01-Transformer架构完全深度解析.md(重点看 Self-Attention 章节)docs/LLM技术深度系列/03-RLHF完整技术解析.md(重点看三阶段流程)
TypeScript 自检(用于读 CC 源码)
不需要会写 TS,但要能读懂以下类型签名:
type Extract<T, U> = T extends U ? T : never |
看不懂 → 花 1 天过:
docs/tech-stack/typescript/syntax/01-基础入门.md(重点看泛型部分)docs/tech-stack/typescript/syntax/02-进阶特性.md(重点看条件类型)
Week 1:Python 异步 + 最小 Agentic Loop
学习材料
docs/tech-stack/python/01-异步编程asyncio.md← Day 1 精读docs/tech-stack/llm/01-AnthropicSDK与LLM接入.md← Day 2 精读docs/02-Agentic查询循环与QueryEngine.md← Day 3 理解架构
每天任务
Day 1:asyncio 基础
- 精读
python/01-异步编程asyncio.md - 手写(不看文档):
# 独立完成以下 4 个实现
# 1. asyncio.gather 并发执行 3 个 API 调用
# 2. AsyncGenerator 流式输出(yield 每个 token)
# 3. asyncio.timeout 给 API 调用加超时
# 4. asyncio.Semaphore 限制并发数为 3 - 验证:4 个实现都能独立运行,不报错
Day 2:Anthropic SDK 接入
- 精读
llm/01-AnthropicSDK与LLM接入.md - 手写(不看文档):
# 独立完成以下实现
# 1. 非流式单轮对话
# 2. 流式对话(逐 token 打印)
# 3. 多轮对话(messages 列表追加)
# 4. 带 Tool 定义的对话(先不处理工具调用,只看响应格式)
Day 3:理解 Agentic Loop 架构
- 精读
docs/02-Agentic查询循环与QueryEngine.md - 在纸上画出完整的 Loop 流程图(从用户输入到最终响应)
- 关键问题:Loop 什么时候终止?怎么处理多个并发工具调用?
Day 4:手写 Agentic Loop v1
# 目标:不看任何参考,独立实现以下功能 |
不要追求完美,先让它跑起来。
Day 5:加入 withRetry
- 精读
docs/tech-stack/typescript/09-错误处理与重试策略.md - 手写 Python 版
with_retry:# 要求:
# - 指数退避:500ms × 2^(attempt-1),上限 32s
# - 25% 随机抖动
# - 优先使用 Retry-After 响应头
# - 429 和 529 都重试,其他 4xx 不重试
# - 最多重试 10 次
Day 6:AbortController / 取消机制
- 精读
docs/tech-stack/typescript/02-异步编程与流式处理.md中 AbortController 部分 - 手写 Python 版取消机制:
# 要求:
# - asyncio.Event 或 asyncio.CancelledError 实现取消
# - 取消信号能传播到子 Agent 和工具调用
# - Ctrl+C 发出取消信号,等待当前工具完成后退出(不强杀)
Day 7:验收测试
下面的代码,闭眼写出来(不看文档),5 分钟内写完:
# 验收:实现一个支持流式输出 + 工具调用 + 取消的最小 Agent |
口述以下问题(对着镜子说):
- Agentic Loop 为什么要用 while True?什么时候 break?
- 工具调用的 ID(tool_use_id)有什么作用?
- 429 和 529 的区别,为什么后台请求遇到 529 要直接丢弃?
Week 2:Tool System 深度 + 权限
学习材料
docs/tech-stack/typescript/06-工具系统完整实现.mddocs/tech-stack/typescript/04-安全与权限模式.mddocs/03-工具系统Tool-System.md
每天任务
Day 1:Tool 接口设计
- 精读
typescript/06-工具系统完整实现.md - 用 Python 实现 Tool 基类:
from abc import ABC, abstractmethod
from pydantic import BaseModel
class Tool(ABC):
name: str
description: str
def input_schema(self) -> dict: # JSON Schema
pass
async def execute(self, input: dict) -> str:
pass
def validate_input(self, input: dict) -> bool:
# 用 jsonschema 校验
pass
Day 2:实现 BashTool
# 要求: |
Day 3:实现 FileReadTool + FileWriteTool
# FileReadTool: |
Day 4:三态权限系统
- 精读
typescript/04-安全与权限模式.md - 手写 Python 版权限系统:
from enum import Enum
class PermissionResult(Enum):
ALLOW = "allow"
DENY = "deny"
ASK = "ask"
class PermissionChecker:
def check(self, tool_name: str, input: dict) -> PermissionResult:
# 1. 检查 allow_list(精确匹配 + 通配符)
# 2. 检查 deny_list(优先级高于 allow)
# 3. 检查危险模式(正则)
# 4. 默认 ASK
pass
Day 5:路径安全检查
# 要求实现以下安全检查 |
Day 6:工具注册表 + 动态加载
# 实现工具注册表,支持: |
Day 7:验收测试
口述(不看笔记,2 分钟内说清楚):
- CC 的
buildTool工厂函数做了什么?为什么要有TOOL_DEFAULTS? - 危险命令检测用什么数据结构?时间复杂度是多少?
- 权限三态(allow/deny/ask)和 Linux 的权限系统有什么区别?
编码题(10 分钟内完成):
# 实现一个函数,判断 bash 命令是否包含注入风险 |
Week 3:MCP 协议(DeepSeek 面试必考)
学习材料
docs/tech-stack/llm/02-MCP协议实践.mddocs/09-MCP协议集成.md
每天任务
Day 1:MCP 协议理解
- 精读
llm/02-MCP协议实践.md全文 - 在纸上画:MCP Client ↔ JSON-RPC ↔ MCP Server 通信图
- 理解:Resources / Tools / Prompts 三类能力的区别
- 理解:stdio transport vs SSE transport 的适用场景
Day 2:手写最小 MCP Server(stdio)
# 要求:实现一个 stdio 传输的 MCP Server |
Day 3:手写 MCP Client
# 要求:实现 MCP Client,连接到你的 Server |
Day 4:MCP 集成到 Agentic Loop
# 修改你的 Agentic Loop: |
Day 5:SSE Transport 实现
# 实现 SSE 传输的 MCP Server(比 stdio 更适合远程部署) |
Day 6:Resources 和 Prompts
# 扩展你的 MCP Server,支持: |
Day 7:验收测试
口述(2 分钟,不看笔记):
- JSON-RPC 2.0 请求格式?必须有哪些字段?notification(通知)和普通请求的区别?
- MCP 的 initialize 握手为什么必须是第一个请求?
- stdio transport 和 SSE transport 各适合什么场景?为什么 CC 在本地用 stdio?
系统设计题(10 分钟口述):
如果你要为一个 Agent 系统设计”工具市场”(类似 npm,用户可以发布/安装工具),基于 MCP 协议,你会怎么设计?
Week 4:Session 持久化 + Prompt 工程
学习材料
docs/tech-stack/nodejs/03-Session持久化与JSONL.mddocs/tech-stack/llm/03-Prompt工程与SystemPrompt.mddocs/tech-stack/llm/04-上下文窗口管理与压缩.mddocs/22-Session管理与状态恢复.md
每天任务
Day 1:JSONL 持久化
# 实现 Session 存储(读你的 JSONL 文档后手写) |
Day 2:Session 恢复
# 实现:从磁盘恢复上一次对话 |
Day 3:五层 SystemPrompt 构建
- 精读
llm/03-Prompt工程与SystemPrompt.md - 手写 Python 版
build_system_prompt:def build_system_prompt(
base: str, # 基础 System Prompt
tools: list[Tool], # 工具描述
memory: str, # CLAUDE.md 内容
context: str, # 当前工作目录等动态上下文
override: str | None = None, # 用户覆盖(优先级最高)
) -> str:
# 5 个层级,按优先级合并
# 注意 Prompt Cache 分段点的位置
pass
Day 4:Prompt Cache 实战
# 目标:实测 Prompt Cache 节省效果 |
Day 5:上下文压缩
- 精读
llm/04-上下文窗口管理与压缩.md - 手写自动压缩逻辑:
AUTOCOMPACT_THRESHOLD = 0.85 # 窗口使用 85% 触发压缩
async def maybe_compact(
messages: list[dict],
current_tokens: int,
max_tokens: int,
) -> list[dict]:
if current_tokens / max_tokens < AUTOCOMPACT_THRESHOLD:
return messages # 不需要压缩
# 调用 LLM 生成历史摘要
summary = await generate_summary(messages)
# 插入 compact_boundary 标记,丢弃旧消息
return [
{"type": "compact_boundary", "summary": summary},
# 保留最近 N 条消息
*messages[-20:],
]
Day 6:Token 计数实战
# 实现离线 token 估算(不调 API) |
Day 7:验收测试
系统设计(15 分钟口述 + 画图):
设计一个 Agent 的上下文管理系统,要求:
- 支持 200k token 的上下文窗口
- 超限时自动压缩,保证关键信息不丢失
- 重启后能完整恢复会话
- 多用户并发时数据不互相干扰
Week 5:多 Agent 协调
学习材料
docs/tech-stack/typescript/07-多Agent协调系统.mddocs/11-任务与多Agent系统.mddocs/20-Swarm多Agent协调系统.md
每天任务
Day 1–2:Sub-Agent 生命周期
# 实现 SubAgent(有独立上下文 + 工具限制) |
Day 3:Fork 模式 vs 普通子 Agent
# Fork:共享 parent 的消息历史(Prompt Cache 复用) |
Day 4–5:Coordinator 模式(Swarm)
# Orchestrator 分配任务给多个 Worker Agent |
Day 6:错误隔离 + 级联取消
# 要求: |
Day 7:验收测试
系统设计(20 分钟):
设计一个”代码审查 Agent”:
- 接收 PR 的 diff
- 并行分配给 3 个子 Agent:安全审查、性能审查、代码风格审查
- 汇总结果,生成综合审查报告
画出架构图,说明通信协议和错误处理
Week 6:Python 生态 + 算法 + RAG
学习材料
docs/tech-stack/python/02-Pydantic数据校验.mddocs/tech-stack/python/03-LLM生态对接.mddocs/tech-stack/python/05-RAG检索增强生成.mddocs/tech-stack/algorithms/02-LLM-Infra面试高频算法.md
每天任务
Day 1:Pydantic + Tool Schema
# 用 Pydantic 定义工具的输入 Schema |
Day 2:DeepSeek API 对接
# DeepSeek 兼容 OpenAI SDK,但有差异 |
Day 3:RAG Pipeline 基础
# 手写完整 RAG Pipeline(不用 LangChain) |
Day 4:混合检索(Hybrid Search)
# 向量检索 + BM25 关键词检索,用 RRF 融合 |
Day 5:算法题(每题独立实现)
| 题目 | 要求 | 时间限制 |
|---|---|---|
| LRU Cache(LeetCode 146) | 双向链表 + HashMap | 15 分钟 |
| 令牌桶限流器 | O(1) consume,支持突发 | 20 分钟 |
| 滑动窗口限流 | O(N) 精确计量 | 15 分钟 |
| Top-K(堆) | 不全排序,O(N log K) | 10 分钟 |
| 一致性哈希 | 150 个虚拟节点 | 20 分钟 |
Day 6:算法题复习
- 把 Day 5 每道题不看答案再写一遍
- 写完对比:有没有 bug?边界条件处理了吗?
Day 7:验收测试
算法题(面试节奏,20 分钟内完成):
# 设计一个 API Gateway 的限流系统 |
Week 7:Capstone 项目(最重要的一周)
项目名:AgentKit — 生产级 Python Agent 框架
这是你的简历主打项目,面试时能完整讲清楚每个设计决策。
功能规格(必须全部完成)
core/ |
每天进度
| 天 | 任务 |
|---|---|
| Day 1 | 搭目录结构,实现 core/agent.py(集成 Week 1–3 成果) |
| Day 2 | 集成 tools/(4 个工具),接 MCP Server/Client |
| Day 3 | 实现 session/(持久化 + 恢复),接入 Agent |
| Day 4 | 实现 context/compressor.py + cost/tracker.py |
| Day 5 | 实现 permissions/ + retry/,完善错误处理 |
| Day 6 | CLI + REPL,写 README(说清楚架构图 + 设计决策) |
| Day 7 | 写测试(VCR fixture),录制 demo,推送 GitHub |
README 必须包含的内容
- 架构图(用 ASCII 或 Mermaid)
- 每个核心模块的设计决策(为什么这样设计,有哪些 trade-off)
- 对比主流框架(LangChain/LangGraph)的区别
Week 8:面试冲刺
Day 1–2:系统设计训练
下面 5 道题,每道 20 分钟,用纸和笔画图 + 口述:
设计一个生产级 Agentic Loop
- 高并发(1000 并发 session)
- 工具超时不阻塞其他用户
- 失败重试不丢失上下文
设计一个 Agent 工具市场
- 开发者发布工具
- Agent 运行时动态加载工具
- 工具隔离(沙箱)
设计一个多模型 Agent 系统
- Orchestrator 用 Opus(复杂推理)
- Worker 用 Haiku(批量处理)
- 按任务类型路由
设计上下文管理系统
- 200k 窗口管理
- 自动压缩 + 恢复
- 多用户数据隔离
设计 MCP 工具市场
- 工具发现(类似 npm search)
- 版本管理
- 权限控制(哪些 Agent 能用哪些工具)
Day 3–4:面试题口述演练
下面每道题,对着镜子或录音,流畅口述 2–3 分钟(不看笔记):
Agentic Loop 类
- Q:完整描述 Agentic Loop 的执行过程
- Q:工具并行执行是如何协调的?
- Q:如何检测 Agent 陷入循环?
- Q:Loop 中断恢复(用户 Ctrl+C 后重新连接)怎么做?
Context Management 类
- Q:上下文窗口满了怎么处理?如何选择丢弃哪些历史?
- Q:Prompt Cache 如何工作?如何最大化缓存命中率?
- Q:Token 计数有哪些方法?各自的精度和成本?
MCP 类
- Q:MCP 协议解决了什么问题?和 Function Calling 有什么区别?
- Q:设计一个支持 1000 个并发 MCP 客户端的服务器
- Q:MCP Server 崩溃时,Agent 如何处理?
安全类
- Q:如何防止 Prompt Injection 攻击?
- Q:BashTool 如何防止危险命令?列举 5 种攻击模式
- Q:工具的最小权限原则如何实现?
工程类
- Q:如何测试一个 LLM Agent?非确定性怎么处理?
- Q:Agent 系统的关键监控指标有哪些?
- Q:如何设计 Agent 系统的分布式追踪?
Day 5:Capstone 项目演练
用 10 分钟,完整介绍你的 AgentKit 项目:
- 解决了什么问题(1 分钟)
- 核心架构(3 分钟,画图)
- 最有挑战性的设计决策(3 分钟)
- 遇到的 bug 和如何解决(2 分钟)
- 和现有框架的对比(1 分钟)
Day 6:速记冲刺
- 通读
docs/面试速记口诀手册.md2 遍(约 1 小时) - 闭眼口述:Agentic Loop 7 步 / 权限 3 层 / SystemPrompt 5 层 / RLHF 3 步 / MoE 4 字
- 手写(不看文档):LRU + 令牌桶 + 滑动窗口(各 10 分钟)
Day 7:针对性补漏
根据你的薄弱点,从以下选择:
- 算法偏弱 → 再刷 5 道 LeetCode(Medium,聚焦 HashMap / Heap / Sliding Window)
- 系统设计偏弱 → 看《设计数据密集型应用》第 1、2 章
- LLM 原理偏弱 → 读
docs/LLM技术深度系列/的 01(Transformer)和 03(RLHF) - Python 语法偏弱 → 重读
docs/tech-stack/python/syntax/02-进阶特性.md(元类/描述符/dataclass) - TypeScript 类型读不懂 → 重读
docs/tech-stack/typescript/syntax/02-进阶特性.md(条件类型/infer) - MCP 偏弱 → 把你的 MCP Server 扩展到支持 10 个工具
必须手写的代码清单(验收标准)
两个月结束时,下面每项在 20 分钟内不看文档独立完成:
必须会的(核心,面试直接考)
- 完整 Agentic Loop(流式 + Tool Use + 重试 + 取消)
- 指数退避
with_retry(含 429/529 区分 + Retry-After 头) - LRU Cache(双向链表实现,O(1))
- 令牌桶限流器(O(1),支持突发)
- 滑动窗口限流(精确版,O(N))
- MCP Server(stdio transport,3 个以上工具)
- BashTool(含安全过滤 + 超时)
- JSONL Session 持久化(原子追加 + compact_boundary 恢复)
- 三态权限系统(allow / deny / ask + 通配符匹配)
- Top-K(最小堆实现)
应该会的(有可能考到)
- RAG Pipeline(chunking + embedding + 向量查询 + 混合检索)
- Sub-Agent(独立上下文 + 工具限制 + 级联取消)
- Prompt Cache 分段策略(为什么这几个位置放 breakpoint)
- 自动上下文压缩(阈值触发 + LLM 摘要 + compact_boundary)
- CircularBuffer(环形缓冲区,O(1) 读写)
- 一致性哈希(虚拟节点版)
面试当天注意事项
- 开口第一句话:描述你的 Capstone 项目,建立技术可信度
- 系统设计:先说假设(并发量、数据量),再画架构图,从简单到复杂
- 算法题:先说思路(时间复杂度),再写代码,写完说优化方向
- 不会的题:说”我没有直接经验,但我会这样思考…”,展示方法论
- 源码引用:说”Claude Code 的 withRetry 用了这个设计,原因是…”,展示深度
进度追踪表
复制到你的笔记本,每周末更新:
Week 0 □ Python语法自检 □ LLM理论自检 □ TS可读性自检 (不需要则跳过) |


